﻿Imports Negocio
Imports DataLayer
Imports Excepciones

Public Class GesActividades

    Public Shared Sub Guardar(actividad As Actividad, tarea As Tarea)

        Try
            If actividad.Usuario Is Nothing Then
                actividad.Usuario = Current.Usuario
            End If
            If tarea Is Nothing Then
                tarea = New Tarea()
            End If

            Dim repository As IRepository = RepositoryFactory.CreateTransactional()
            repository.Nombre = "ACTIVIDADES_PROC"
            repository.AddParameter("@ACCION", actividad.Persistencia)
            repository.AddParameter("@ID", actividad.OID)
            repository.AddParameter("@DESCRIPCION", actividad.Descripcion)
            repository.AddParameter("@FECHA", DateTime.Now)
            repository.AddParameter("@IDTIPOACTIVIDAD", actividad.Tipo.OID)
            repository.AddParameter("@PROGRESO", actividad.Progreso)
            repository.AddParameter("@IDTAREA", tarea.OID)
            repository.AddParameter("@IDUSUARIO", actividad.Usuario.OID)
            repository.ExecuteNonQuery()
            repository.Commit()
        Catch ex As Exception
            Throw New ActividadSaveException()
        End Try

        GesBitacoras.Guardar(tarea.Persistencia, "ModActividad", New String() {"Actividad", actividad.OID})

    End Sub

    Public Shared Sub Eliminar(actividad As Actividad)
        actividad.Persistencia = EstadoPersistencia.DELETE
        Guardar(actividad, Nothing)
    End Sub

    Public Shared Function Consultar(tarea As Tarea) As List(Of Actividad)
        Return Consultar(tarea, Nothing, Nothing, Nothing)
    End Function

    Public Shared Function Consultar(user As Usuario) As List(Of Actividad)
        Return Consultar(Nothing, Nothing, Nothing, user)
    End Function

    Public Shared Function Consultar(tarea As Tarea, fecha As System.Nullable(Of Date), user As Usuario) As List(Of Actividad)

        Return Consultar(tarea, Nothing, fecha, user)
    End Function

    Public Shared Function Consultar(tarea As Tarea, tipo As TipoActividad, fecha As System.Nullable(Of Date), user As Usuario) As List(Of Actividad)

        If user Is Nothing Then
            user = New Usuario()
            user.OID = Nothing
        End If
        If tipo Is Nothing Then
            tipo = New TipoActividad()
            tipo.OID = Nothing
        End If

        Dim actividades As New List(Of Actividad)
        Try
            Dim repository As IRepository = RepositoryFactory.Create()
            repository.Nombre = "ACTIVIDADES_PROC"
            repository.AddParameter("@ACCION", "4")
            repository.AddParameter("@ID", Nothing)
            repository.AddParameter("@DESCRIPCION", Nothing)
            repository.AddParameter("@FECHA", fecha)
            repository.AddParameter("@IDTIPOACTIVIDAD", tipo.OID)
            repository.AddParameter("@PROGRESO", Nothing)
            repository.AddParameter("@IDTAREA", tarea.OID)
            repository.AddParameter("@IDUSUARIO", user.OID)
            Dim dtActividad As DataTable = repository.ExecuteDataTable()

            For Each dr As DataRow In dtActividad.Rows
                Dim a As New Actividad()
                a.Persistencia = EstadoPersistencia.UPDATE
                a.OID = Convert.ToInt32(dr.Item("actID"))
                a.Descripcion = dr.Item("actDESCRIPCION").ToString()
                a.Fecha = Convert.ToDateTime(dr.Item("actFECHA"))
                a.Tipo = GesTipoActividad.Obtener(Convert.ToInt32(dr.Item("actIDTIPOACTIVIDAD")))
                a.Progreso = Convert.ToDecimal(dr.Item("actPROGRESO"))
                a.Usuario = GesUsuarios.Obtener(dr.Item("usuNICK").ToString(), True)

                actividades.Add(a)
            Next

        Catch ex As Exception
            Throw New ActividadGetException()
        End Try

        Return actividades
    End Function

    Public Shared Function ProgresoRestante(actividad As Actividad, tarea As Tarea) As Decimal

        Try
            Dim repository As IRepository = RepositoryFactory.Create()
            repository.Nombre = "ACTIVIDADES_PROC"
            repository.AddParameter("@ACCION", "PROGRESS")
            repository.AddParameter("@ID", actividad.OID)
            repository.AddParameter("@DESCRIPCION", Nothing)
            repository.AddParameter("@FECHA", Nothing)
            repository.AddParameter("@IDTIPOACTIVIDAD", Nothing)
            repository.AddParameter("@PROGRESO", Nothing)
            repository.AddParameter("@IDTAREA", tarea.OID)
            repository.AddParameter("@IDUSUARIO", Nothing)

            Dim prog As Decimal = Convert.ToDecimal(repository.ExecuteScalar())
            Return prog

        Catch ex As Exception
            Throw New ActividadGetException()
        End Try

    End Function

    Public Shared Sub AgregarArchivo(actividad As Actividad, archivo As Archivo)

    End Sub

    Public Shared Sub QuitarArchivo(actividad As Actividad, archivo As Archivo)

    End Sub

End Class
